# content/apps.py
from django.apps import AppConfig
from apscheduler.schedulers.background import BackgroundScheduler
from django.conf import settings
import logging
import os

from django.utils.datetime_safe import datetime

logger = logging.getLogger(__name__)


class ContentConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'content'

    def ready(self):
        # 仅在开发环境且非重载子进程时运行
        if settings.DEBUG and os.environ.get('RUN_MAIN') == 'true':
            self.init_scheduler()

    def init_scheduler(self):
        """初始化定时任务"""
        try:
            scheduler = BackgroundScheduler()

            # 每日0点执行
            scheduler.add_job(
                self.run_daily_recommendations,
                'cron',
                hour=0,
                minute=0,
                id='daily_recommendations'
            )

            # 修改点：每分钟执行一次，用于功能测试
            scheduler.add_job(
                self.run_daily_recommendations,
                'interval',  # 使用间隔触发器
                minutes=1,  # 每分钟执行
                id='minute_recommendations'
            )

            # 立即执行一次（测试用）
            scheduler.add_job(
                self.run_daily_recommendations,
                'date',
                run_date=datetime.now()  # 立即执行
            )

            scheduler.start()
            logger.info("✅ 定时任务已启动")
        except Exception as e:
            logger.error(f"❌ 定时任务启动失败: {str(e)}")
            if scheduler.running:
                scheduler.shutdown()

    def run_daily_recommendations(self):
        """执行推荐任务"""
        from common.collaborative_filtering import calculate_daily_recommendations
        try:
            calculate_daily_recommendations()
            logger.info("✅ 每日推荐任务执行完成")
        except Exception as e:
            logger.error(f"❌ 推荐任务执行失败: {str(e)}")